|
|
@@ -1,73 +0,0 @@
|
1
|
|
-module Agents
|
2
|
|
- class AdiosoAgent < Agent
|
3
|
|
- cannot_receive_events!
|
4
|
|
-
|
5
|
|
- default_schedule "every_1d"
|
6
|
|
-
|
7
|
|
- description <<-MD
|
8
|
|
- The Adioso Agent will tell you the minimum airline prices between a pair of cities, and within a certain period of time.
|
9
|
|
-
|
10
|
|
- The currency is USD. Please make sure that the difference between `start_date` and `end_date` is less than 150 days. You will need to contact [Adioso](http://adioso.com/)
|
11
|
|
- for a `username` and `password`.
|
12
|
|
- MD
|
13
|
|
-
|
14
|
|
- event_description <<-MD
|
15
|
|
- If flights are present then events look like:
|
16
|
|
-
|
17
|
|
- {
|
18
|
|
- "cost": 75.23,
|
19
|
|
- "date": "June 25, 2013",
|
20
|
|
- "route": "New York to Chicago"
|
21
|
|
- }
|
22
|
|
-
|
23
|
|
- otherwise
|
24
|
|
-
|
25
|
|
- {
|
26
|
|
- "nonetodest": "No flights found to the specified destination"
|
27
|
|
- }
|
28
|
|
- MD
|
29
|
|
-
|
30
|
|
- def default_options
|
31
|
|
- {
|
32
|
|
- 'start_date' => Date.today.httpdate[0..15],
|
33
|
|
- 'end_date' => Date.today.plus_with_duration(100).httpdate[0..15],
|
34
|
|
- 'from' => "New York",
|
35
|
|
- 'to' => "Chicago",
|
36
|
|
- 'username' => "xx",
|
37
|
|
- 'password' => "xx",
|
38
|
|
- 'expected_update_period_in_days' => "1"
|
39
|
|
- }
|
40
|
|
- end
|
41
|
|
-
|
42
|
|
- def working?
|
43
|
|
- event_created_within?(options['expected_update_period_in_days']) && !recent_error_logs?
|
44
|
|
- end
|
45
|
|
-
|
46
|
|
- def validate_options
|
47
|
|
- unless %w[start_date end_date from to username password expected_update_period_in_days].all? { |field| options[field].present? }
|
48
|
|
- errors.add(:base, "All fields are required")
|
49
|
|
- end
|
50
|
|
- end
|
51
|
|
-
|
52
|
|
- def date_to_unix_epoch(date)
|
53
|
|
- date.to_time.to_i
|
54
|
|
- end
|
55
|
|
-
|
56
|
|
- def check
|
57
|
|
- auth_options = {:basic_auth => {:username =>interpolated[:username], :password=>interpolated['password']}}
|
58
|
|
- parse_response = HTTParty.get "http://api.adioso.com/v2/search/parse?q=#{URI.encode(interpolated['from'])}+to+#{URI.encode(interpolated['to'])}", auth_options
|
59
|
|
- fare_request = parse_response["search_url"].gsub /(end=)(\d*)([^\d]*)(\d*)/, "\\1#{date_to_unix_epoch(interpolated['end_date'])}\\3#{date_to_unix_epoch(interpolated['start_date'])}"
|
60
|
|
- fare = HTTParty.get fare_request, auth_options
|
61
|
|
-
|
62
|
|
- if fare["warnings"]
|
63
|
|
- create_event :payload => fare["warnings"]
|
64
|
|
- else
|
65
|
|
- event = fare["results"].min {|a,b| a["cost"] <=> b["cost"]}
|
66
|
|
- event["date"] = Time.at(event["date"]).to_date.httpdate[0..15]
|
67
|
|
- event["route"] = "#{interpolated['from']} to #{interpolated['to']}"
|
68
|
|
- create_event :payload => event
|
69
|
|
- end
|
70
|
|
- end
|
71
|
|
- end
|
72
|
|
-end
|
73
|
|
-
|